package core;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.jdom.Element;

import constants.ProjectConstants;

import utils.MetodosAuxiliares;

import acessoDados.Singleton;
import acessoDados.dao.BaseDAO;

public class BuilderReserva {
	private int idReserva;
	private int idViagem;

	@SuppressWarnings("static-access")
	public void buildLugares(Object[] posicoes) throws SQLException, ClassNotFoundException{
		for(int i=0; i<posicoes.length; i++)
			Singleton.getInstance().getReservaDAO().associaLugar(idReserva, Integer.parseInt( ((Element)posicoes[i]).getText() ) );
		
		BaseDAO dao = Singleton.getInstance();
		//Fechar viagem, caso se atinja o limite de reservas
		if( dao.getReservaDAO().getNumeroReservas(""+this.idViagem) == dao.getViagemDAO().getLotacao(""+this.idViagem) ){
			Viagem viagem = new Viagem();
			viagem.setIdViagem(idViagem);
			viagem.setState(ProjectConstants.ACTIVO);
			viagem.fechaViagem();
		}
	}
	
	@SuppressWarnings("static-access")
	public int criaReserva(String login, int idViagem, String tipoPagamento, int numeroLugares) throws SQLException, ClassNotFoundException{
		BaseDAO dao = Singleton.getInstance();
		
		int quantPagamento;
		if(tipoPagamento.equalsIgnoreCase(ProjectConstants.TROCAR_MILHAS)){
			quantPagamento = numeroLugares * MetodosAuxiliares.calculaMilhas(""+idViagem);
			ResultSet rs = dao.getPessoaDAO().getDetalhesCliente(login);
			if(rs.next() && rs.getInt("milhasAcumuladas")<quantPagamento){
				return 0;
			}
			dao.getPessoaDAO().addMilhas(login, -quantPagamento);
		}
		else{
			quantPagamento = numeroLugares * Integer.parseInt(dao.getViagemDAO().getPreco(""+idViagem));
		}
		
		this.idReserva = Singleton.getInstance().getReservaDAO().criaReserva(login, idViagem, tipoPagamento, quantPagamento);
		
		this.idViagem = idViagem;
		
		return this.idReserva;		
	}
}
